package com.androidhelper.module.common.app;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;

import com.androidhelper.module.common.BuildConfig;

import me.yokeyword.fragmentation.Fragmentation;
import me.yokeyword.fragmentation.helper.ExceptionHandler;


public class LibApplication   extends Application {  //extends MultiDexApplication

    private static LibApplication instance;
    public static synchronized LibApplication getInstance() {
        return instance;
    }



    //  private RefWatcher mRefWatcher;
    /*
    *
    * 如果有自定义的Application，那么在自定义的Application类中，重写attachBaseContext()，
    * 并且在其中调用super.attachBaseContext()，然后调用MultiDex.install(this) ，
    * 然后在该方法上加上@Override注解，既然是重写方法，最好加上这个注解，不过Android Studio会自动加上。
    * */
    @Override
    public void attachBaseContext( Context base) {
        super.attachBaseContext(base);
       //   MultiDex.install(this);  //这里比 onCreate 先执行,常用于 MultiDex 初始化,插件化框架的初始化
    }

    @Override
    public void onCreate() {
        super.onCreate();
         instance = this;

       //  Utils.init(this);
         //initLeakCanary();
         registerActivityLifecycleCallbacks(mCallbacks);
          initFragmentation();
    }



    /*public void initLeakCanary() {
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }
       mRefWatcher = LeakCanary.install(this);
       // LeakCanary.install(this);
    }

    public static RefWatcher getRefWatcher(Context context) {
        LibApplication application = (LibApplication) context.getApplicationContext();
        return application.mRefWatcher;
    }
*/


    private void initFragmentation() {
        Fragmentation.builder()
                // 设置 栈视图 模式为 （默认）悬浮球模式   SHAKE: 摇一摇唤出  NONE：隐藏， 仅在Debug环境生效
                .stackViewMode(Fragmentation.BUBBLE)
                .debug(BuildConfig.DEBUG) // 实际场景建议.debug(BuildConfig.DEBUG)
                /**
                 * 可以获取到{@link me.yokeyword.fragmentation.exception.AfterSaveStateTransactionWarning}
                 * 在遇到After onSaveInstanceState时，不会抛出异常，会回调到下面的ExceptionHandler
                 */
                .handleException(new ExceptionHandler() {
                    @Override
                    public void onException(Exception e) {
                        // 以Bugtags为例子: 把捕获到的 Exception 传到 Bugtags 后台。
                        // Bugtags.sendException(e);
                        //todo 放bugly 看如何????????看后续
                    }
                })
                .install();
    }




    private ActivityLifecycleCallbacks mCallbacks = new ActivityLifecycleCallbacks() {

        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        }

        @Override
        public void onActivityStarted(Activity activity) {
        }

        @Override
        public void onActivityResumed(Activity activity) {
        }

        @Override
        public void onActivityPaused(Activity activity) {
        }

        @Override
        public void onActivityStopped(Activity activity) {
        }

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        }

        @Override
        public void onActivityDestroyed(Activity activity) {
        }
    };




}
